﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Hospital.Models;

namespace Hospital.Controllers
{
    public class ManController : Controller
    {

        private DataManager _dataManager;

        public ManController(DataManager dataManager)
        {
            _dataManager = dataManager;
        }

        public ActionResult List()
        {
            ViewData["Title"] = "Список пациентов";
            ViewData["Man"] = _dataManager.men.GetMen();
            return View();
        }

        public ActionResult OneMan(int id)
        {
            ViewData.Model = _dataManager.men.GetMan(id);
            return View();
        }

        public ActionResult Delete(int id)
        {
            _dataManager.men.DeleteMan(id);
            return RedirectToAction("List");
        }

        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Edit(int id)
        {
            Men m = _dataManager.men.GetMan(id);
            ViewData.Model = m;

            SetEditList(m);
            return View();                        
        }

        private void SetEditList(Men m)
        {
            ViewData["Users"] = new SelectList(_dataManager.Membership.GetUsers(), "ProviderUserKey", "UserName", m.AssignedOn);
        }

        private void SetEditListDoc()
        {
            ViewData["Doct"] = new SelectList(_dataManager.doc.GetDoctorsSpec());
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id, Men m)
        {
            if (m.FIO == null) ModelState.AddModelError("FIO", "Поле не может быть пустым");
            else
                if (m.FIO.Length < 5) ModelState.AddModelError("FIO", "ФИО не может быть короче 5 символов");
            if (m.Phone == null) ModelState.AddModelError("Phone", "Поле не может быть пустым");
            else
                if (m.Phone.Length < 5) ModelState.AddModelError("Phone", "В номере телефона не может быть меньше 5 цифр");
            if (m.Polis == null) ModelState.AddModelError("Polis", "Поле не может быть пустым");
            else
                if (m.Polis.Length < 9) ModelState.AddModelError("Polis", "В полисе не может быть меньше 9 цифр");

            if (ModelState.IsValid)
            {
                m.Id_Man = id;
                _dataManager.men.UpdateMan(m);
                return RedirectToAction("List");
            }
            SetEditList(m);
            return View();
        }

        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Add()
        {
            SetEditListDoc();
            return View();
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Add(string fio, string adress, string phone, string polis, string spec)
        {
            if (fio == null) ModelState.AddModelError("FIO", "Поле не может быть пустым");
            else
                if (fio.Length < 5) ModelState.AddModelError("FIO", "ФИО не может быть короче 5 символов");
            if (phone == null) ModelState.AddModelError("Phone", "Поле не может быть пустым");
            else
                if (phone.Length < 5) ModelState.AddModelError("Phone", "В номере телефона не может быть меньше 5 цифр");
            if (polis == null) ModelState.AddModelError("Polis", "Поле не может быть пустым");
            else
                if (polis.Length < 9) ModelState.AddModelError("Polis", "В полисе не может быть меньше 9 цифр");

            if (ModelState.IsValid)
            {
                _dataManager.men.AddMan(fio, adress, phone, polis);
                _dataManager.zap.AddZapros(_dataManager.men.GetLastMan(polis).Id_Man, spec, _dataManager.doc.GetDoctorsBySpec(spec));
                return RedirectToAction("List");
            }
            return View();
        }

    }
}
